// ************************************************
// >> File Name: /home/diabio/project/thread_pool/test/test.c
// >> Author: diabiolin
// >> Created Time: Tue 29 Apr 2025 09:46:29 AM CST
// >> Description:
// ************************************************

#include "thread_pool.h"
#include <stdio.h>
#include <unistd.h>

// 任务1：打印数字
void print_number(void* arg) {
    int num = *(int*)arg;
    printf("正在执行任务，数字是: %d\n", num);
    sleep(1);  // 模拟任务执行时间
}

// 任务2：打印字符串
void print_string(void* arg) {
    char* str = (char*)arg;
    printf("正在执行任务，字符串是: %s\n", str);
    sleep(1);  // 模拟任务执行时间
}

int main() {
    printf("=== 线程池测试开始 ===\n");

    // 创建线程池：最大线程数4，初始线程数2，任务队列大小10
    ThreadPool_t* pool = threadPoolCreate(4, 2, 10);
    if (pool == NULL) {
        printf("创建线程池失败！\n");
        return 1;
    }
    printf("线程池创建成功\n");

    // 准备一些测试数据
    int nums[] = {1, 2, 3, 4, 5};
    char* strings[] = {"Hello", "World", "Thread", "Pool", "Test"};

    // 添加数字打印任务
    printf("\n添加数字打印任务...\n");
    for (int i = 0; i < 5; i++) {
        int ret = threadPoolAddTask(pool, print_number, &nums[i]);
        printf("添加任务 %d, 返回值: %d\n", i + 1, ret);
    }

    // 等待一会儿
    sleep(3);

    // 添加字符串打印任务
    printf("\n添加字符串打印任务...\n");
    for (int i = 0; i < 5; i++) {
        int ret = threadPoolAddTask(pool, print_string, strings[i]);
        printf("添加任务 %d, 返回值: %d\n", i + 1, ret);
    }

    // 等待任务执行完成
    sleep(3);

    // 优雅关闭线程池
    printf("\n开始关闭线程池...\n");
    int ret = threadPoolGracefulDestroy(pool);
    printf("线程池关闭%s\n", ret == 0 ? "成功" : "失败");

    printf("=== 线程池测试结束 ===\n");
    return 0;
}